package com.fate.system.dto.approval;

import com.fate.framework.handler.ListTypeHandler;
import lombok.Data;
import lombok.Getter;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import jakarta.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

import java.io.Serial;
import java.io.Serializable;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

import io.swagger.v3.oas.annotations.media.Schema;

import org.hibernate.validator.constraints.Length;

/**
 * @Author: ten.x @TableName gov_approval @Date: 2024-08-26 11:52:23 @Version: V1.0
 */
@Data
@Accessors(chain = true)
@TableName(value = "gov_approval")
@EqualsAndHashCode(callSuper = false)
public class ApprovalAddDTO implements Serializable {

  @Serial
  @TableField(exist = false)
  private static final long serialVersionUID = 1L;

  /** */
  @NotBlank(message = "[]不能为空")
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "id")
  @Schema(description = "")
  @Length(max = 100, message = "编码长度不能超过100")
  private String id;

  /** 是否删除 */
  @NotNull(message = "[是否删除]不能为空")
  @TableField(value = "deleted")
  @Schema(description = "是否删除")
  private Integer deleted;

  /** 创建时间 */
  @NotNull(message = "[创建时间]不能为空")
  @TableField(value = "gmt_create")
  @Schema(description = "创建时间")
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private LocalDateTime gmtCreate;

  /** 修改时间 */
  @NotNull(message = "[修改时间]不能为空")
  @TableField(value = "gmt_modified")
  @Schema(description = "修改时间")
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private LocalDateTime gmtModified;

  /** 租户id */
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "tenant_id")
  @Schema(description = "租户id")
  @Length(max = 100, message = "编码长度不能超过100")
  private String tenantId;

  /** 客户id */
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "client_id")
  @Schema(description = "客户id")
  @Length(max = 100, message = "编码长度不能超过100")
  private String clientId;

  /** 设备id */
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "equipment_id")
  @Schema(description = "设备id")
  @Length(max = 100, message = "编码长度不能超过100")
  private String equipmentId;

  /** 普通用户id */
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "normal_id")
  @Schema(description = "普通用户id")
  @Length(max = 100, message = "编码长度不能超过100")
  private String normalId;

  /** 审批类型【1退款】 */
  @TableField(value = "type")
  @Schema(description = "审批类型【1退款】")
  private Integer type;

  /** 操作人id */
  @Size(max = 255, message = "编码长度不能超过255")
  @TableField(value = "operator_id")
  @Schema(description = "操作人id")
  @Length(max = 255, message = "编码长度不能超过255")
  private String operatorId;

  /** 操作时间 */
  @TableField(value = "operation_time")
  @Schema(description = "操作时间")
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private LocalDateTime operationTime;

  /** 订单id */
  @Size(max = 100, message = "编码长度不能超过100")
  @TableField(value = "order_form_id")
  @Schema(description = "订单id")
  @Length(max = 100, message = "编码长度不能超过100")
  private String orderFormId;

  /** 流程实例id */
  @TableField(value = "instance_id")
  @Schema(description = "流程实例id")
  private String instanceId;

  /** 审批状态【1未审批 2已通过 3已驳回】 */
  @TableField(value = "status")
  @Schema(description = "审批状态【1未审批 2已通过 3已驳回】")
  private Integer status;

  @TableField(value = "picture")
  private List<String> picture;

  @TableField(value = "content")
  private String content;
  @TableField(value = "approval_message")
  private String approvalMessage;
}
